<!DOCTYPE html>












  


<html class="theme-next muse use-motion" lang>
<head><meta name="generator" content="Hexo 3.9.0">
  <meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
<meta name="theme-color" content="#222">




  
  
    
    
  <script src="/lib/pace/pace.min.js?v=1.0.2"></script>
  <link rel="stylesheet" href="/lib/pace/pace-theme-minimal.min.css?v=1.0.2">







  <meta name="google-site-verification" content="true">







  <meta name="baidu-site-verification" content="true">











<link rel="stylesheet" href="/lib/font-awesome/css/font-awesome.min.css?v=4.6.2">

<link rel="stylesheet" href="/css/main.css?v=6.7.0">


  <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png?v=6.7.0">


  <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32-next.png?v=6.7.0">


  <link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16-next.png?v=6.7.0">


  <link rel="mask-icon" href="/images/logo.svg?v=6.7.0" color="#222">







<script id="hexo.configurations">
  var NexT = window.NexT || {};
  var CONFIG = {
    root: '/',
    scheme: 'Muse',
    version: '6.7.0',
    sidebar: {"position":"left","display":"post","offset":12,"b2t":false,"scrollpercent":false,"onmobile":false},
    fancybox: false,
    fastclick: false,
    lazyload: false,
    tabs: true,
    motion: {"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}},
    algolia: {
      applicationID: '',
      apiKey: '',
      indexName: '',
      hits: {"per_page":5},
      labels: {"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}
    }
  };
</script>


  





    <meta name="baidu-site-verification" content="8NezAkUO3s">


  <meta name="description" content="postgresql Learning resource map引用ty4z2008 PostgreSQL(数据库)资料 About:PostgreSQL About 《PostgreSQL 源码分析系列》   PostgreSQL 源码分析系列  介绍:PostgreSQL 源码分析系列文章  《PG 内存上下文》  介绍：PG 内存上下文,code  《PostgreSQL及其代码的结构》">
<meta name="keywords" content="postgresql">
<meta property="og:type" content="article">
<meta property="og:title" content="postgresql Learning resource map">
<meta property="og:url" content="https://moonclearner.cn/database/postgresqlLearningResource.html">
<meta property="og:site_name" content="moonclearner page">
<meta property="og:description" content="postgresql Learning resource map引用ty4z2008 PostgreSQL(数据库)资料 About:PostgreSQL About 《PostgreSQL 源码分析系列》   PostgreSQL 源码分析系列  介绍:PostgreSQL 源码分析系列文章  《PG 内存上下文》  介绍：PG 内存上下文,code  《PostgreSQL及其代码的结构》">
<meta property="og:locale" content="default">
<meta property="og:image" content="https://wiki.postgresql.org/images/3/30/PostgreSQL_logo.3colors.120x120.png">
<meta property="og:updated_time" content="2019-12-30T10:40:17.433Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="postgresql Learning resource map">
<meta name="twitter:description" content="postgresql Learning resource map引用ty4z2008 PostgreSQL(数据库)资料 About:PostgreSQL About 《PostgreSQL 源码分析系列》   PostgreSQL 源码分析系列  介绍:PostgreSQL 源码分析系列文章  《PG 内存上下文》  介绍：PG 内存上下文,code  《PostgreSQL及其代码的结构》">
<meta name="twitter:image" content="https://wiki.postgresql.org/images/3/30/PostgreSQL_logo.3colors.120x120.png">



  <link rel="alternate" href="/atom.xml" title="moonclearner page" type="application/atom+xml">




  <link rel="canonical" href="https://moonclearner.cn/database/postgresqlLearningResource.html">



<script id="page.configurations">
  CONFIG.page = {
    sidebar: "",
  };
</script>

  <title>postgresql Learning resource map | moonclearner page</title>
  












  <noscript>
  <style>
  .use-motion .motion-element,
  .use-motion .brand,
  .use-motion .menu-item,
  .sidebar-inner,
  .use-motion .post-block,
  .use-motion .pagination,
  .use-motion .comments,
  .use-motion .post-header,
  .use-motion .post-body,
  .use-motion .collection-title { opacity: initial; }

  .use-motion .logo,
  .use-motion .site-title,
  .use-motion .site-subtitle {
    opacity: initial;
    top: initial;
  }

  .use-motion .logo-line-before i { left: initial; }
  .use-motion .logo-line-after i { right: initial; }
  </style>
</noscript>

</head>

<body itemscope itemtype="http://schema.org/WebPage" lang="default">
  <div class="bg_content">
      <canvas id="canvas"></canvas>
  </div>

  
  
    
  

  <div class="container sidebar-position-left page-post-detail">
    <div class="headband"></div>
    <!--github-start-->
    <a href="https://github.com/moonclearner" class="github-corner" aria-label="View source on GitHub"><svg width="80" height="80" viewbox="0 0 250 250" style="fill:#151513; color:#fff; position: absolute; top: 0; border: 0; right: 0;" aria-hidden="true"><path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"/><path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"/><path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"/></svg></a><style>.github-corner:hover .octo-arm{animation:octocat-wave 560ms ease-in-out}@keyframes octocat-wave{0%,100%{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}@media (max-width:500px){.github-corner:hover .octo-arm{animation:none}.github-corner .octo-arm{animation:octocat-wave 560ms ease-in-out}}</style>
    <!--github-end-->

    <header id="header" class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-brand-wrapper">
  <div class="site-meta">
    

    <div class="custom-logo-site-title">
      <a href="/" class="brand" rel="start">
        <span class="logo-line-before"><i></i></span>
        <span class="site-title">moonclearner page</span>
        <span class="logo-line-after"><i></i></span>
      </a>
    </div>
    
      
        <p class="site-subtitle">moonclearner blog</p>
      
    
    
  </div>

  <div class="site-nav-toggle">
    <button aria-label="Toggle navigation bar">
      <span class="btn-bar"></span>
      <span class="btn-bar"></span>
      <span class="btn-bar"></span>
    </button>
  </div>
</div>



<nav class="site-nav">
  
    <ul id="menu" class="menu">
      
        
        
        
          
          <li class="menu-item menu-item-home">

    
    
    
      
    

    

    <a href="/" rel="section"><i class="menu-item-icon fa fa-fw fa-home"></i> <br>Home</a>

  </li>
        
        
        
          
          <li class="menu-item menu-item-tags">

    
    
    
      
    

    

    <a href="/tags/" rel="section"><i class="menu-item-icon fa fa-fw fa-tags"></i> <br>Tags</a>

  </li>
        
        
        
          
          <li class="menu-item menu-item-categories">

    
    
    
      
    

    

    <a href="/categories/" rel="section"><i class="menu-item-icon fa fa-fw fa-th"></i> <br>Categories</a>

  </li>
        
        
        
          
          <li class="menu-item menu-item-archives">

    
    
    
      
    

    

    <a href="/archives/" rel="section"><i class="menu-item-icon fa fa-fw fa-archive"></i> <br>Archives</a>

  </li>
        
        
        
          
          <li class="menu-item menu-item-about">

    
    
    
      
    

    

    <a href="/about/" rel="section"><i class="menu-item-icon fa fa-fw fa-user"></i> <br>About</a>

  </li>
        
        
        
          
          <li class="menu-item menu-item-sitemap">

    
    
    
      
    

    

    <a href="/sitemap.xml" rel="section"><i class="menu-item-icon fa fa-fw fa-sitemap"></i> <br>Sitemap</a>

  </li>

      
      
        <li class="menu-item menu-item-search">
          
            <a href="javascript:;" class="popup-trigger">
          
            
              <i class="menu-item-icon fa fa-search fa-fw"></i> <br>Search</a>
        </li>
      
    </ul>
  

  
    

  

  
    <div class="site-search">
      
  <div class="popup search-popup local-search-popup">
  <div class="local-search-header clearfix">
    <span class="search-icon">
      <i class="fa fa-search"></i>
    </span>
    <span class="popup-btn-close">
      <i class="fa fa-times-circle"></i>
    </span>
    <div class="local-search-input-wrapper">
      <input autocomplete="off" placeholder="Searching..." spellcheck="false" type="text" id="local-search-input">
    </div>
  </div>
  <div id="local-search-result"></div>
</div>



    </div>
  
</nav>



  



</div>
    </header>

    


    <main id="main" class="main">
      <div class="main-inner">
        <div class="content-wrap">
          
          <div id="content" class="content">
            

  <div id="posts" class="posts-expand">
    

  

  
  
  

  

  <article class="post post-type-normal" itemscope itemtype="http://schema.org/Article">
  
  
  
  <div class="post-block">
    <link itemprop="mainEntityOfPage" href="https://moonclearner.cn/database/postgresqlLearningResource.html">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="name" content="moonclearner">
      <meta itemprop="description" content="moonclearner record code skill and my feeling">
      <meta itemprop="image" content="/images/avatar.gif">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="moonclearner page">
    </span>

    
      <header class="post-header">

        
        
          <h1 class="post-title" itemprop="name headline">postgresql Learning resource map

              
            
          </h1>
        

        <div class="post-meta">
          <span class="post-time">

            
            
            

            
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              
                <span class="post-meta-item-text">Posted on</span>
              

              
                
              

              <time title="Created: 2021-07-18 19:28:31" itemprop="dateCreated datePublished" datetime="2021-07-18T19:28:31+08:00">2021-07-18</time>
            

            
              

              
                
                <span class="post-meta-divider">|</span>
                

                <span class="post-meta-item-icon">
                  <i class="fa fa-calendar-check-o"></i>
                </span>
                
                  <span class="post-meta-item-text">Edited on</span>
                
                <time title="Modified: 2019-12-30 18:40:17" itemprop="dateModified" datetime="2019-12-30T18:40:17+08:00">2019-12-30</time>
              
            
          </span>

          
            <span class="post-category">
            
              <span class="post-meta-divider">|</span>
            
              <span class="post-meta-item-icon">
                <i class="fa fa-folder-o"></i>
              </span>
              
                <span class="post-meta-item-text">In</span>
              
              
                <span itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/postgresql/" itemprop="url" rel="index"><span itemprop="name">postgresql</span></a></span>

                
                
              
            </span>
          

          
            
          

          
          

          

          
            <div class="post-symbolscount">
              

              
                <span class="post-meta-item-icon">
                  <i class="fa fa-file-word-o"></i>
                </span>
                
                  <span class="post-meta-item-text">Symbols count in article: </span>
                
                <span title="Symbols count in article">17k</span>
              

              
                <span class="post-meta-divider">|</span>
              

              
                <span class="post-meta-item-icon">
                  <i class="fa fa-clock-o"></i>
                </span>
                
                  <span class="post-meta-item-text">Reading time &asymp;</span>
                
                <span title="Reading time">16 mins.</span>
              
            </div>
          

          

        </div>
      </header>
    

    
    
    
    <div class="post-body" itemprop="articleBody">

      
      

      
        <h1 id="postgresql-Learning-resource-map"><a href="#postgresql-Learning-resource-map" class="headerlink" title="postgresql Learning resource map"></a>postgresql Learning resource map</h1><p>引用<a href="https://github.com/ty4z2008/Qix" target="_blank" rel="noopener">ty4z2008</a></p>
<h2 id="PostgreSQL-数据库-资料"><a href="#PostgreSQL-数据库-资料" class="headerlink" title="PostgreSQL(数据库)资料"></a>PostgreSQL(数据库)资料</h2><p><img src="https://wiki.postgresql.org/images/3/30/PostgreSQL_logo.3colors.120x120.png" alt="PostgreSQL"></p>
<p>About:<a href="http://www.postgresql.org/about/" target="_blank" rel="noopener">PostgreSQL About</a></p>
<p><a href="#pg_kernel">《PostgreSQL 源码分析系列》</a></p>
<ul>
<li><a name="pg_kernel"> PostgreSQL 源码分析系列</a></li>
</ul>
<p>介绍:PostgreSQL 源码分析系列文章</p>
<ul>
<li><a href="http://www.zhangxiaojian.name/?p=447" target="_blank" rel="noopener">《PG 内存上下文》</a></li>
</ul>
<p>介绍：PG 内存上下文,<a href="https://github.com/zhangxiaojian/memoryContext" target="_blank" rel="noopener">code</a></p>
<ul>
<li><a href="http://wiki.postgresql.org/wiki/Pgsrcstructure" target="_blank" rel="noopener">《PostgreSQL及其代码的结构》</a></li>
</ul>
<p>介绍:PostgreSQL及其代码的结构</p>
<ul>
<li><a href="http://www.postgresql.org/files/developer/tour.pdf" target="_blank" rel="noopener">《A Tour of PostgreSQL Internals》</a></li>
</ul>
<p>介绍:PostgreSQL内部的概览,可以结合上面的pg代码结构来阅读</p>
<ul>
<li><a href="http://www.zhangxiaojian.name/?p=317" target="_blank" rel="noopener">《PostgreSQL 中的 Json —从使用到源码》</a></li>
</ul>
<p>介绍：PostgreSQL 中的 Json —从使用到源码</p>
<ul>
<li><a href="http://mp.weixin.qq.com/s?__biz=MzIwNzEzNDkxNQ==&amp;mid=400885298&amp;idx=1&amp;sn=76df79eff99131cf6e64991b1629e8c9&amp;scene=7#wechat_redirect" target="_blank" rel="noopener">《PostgreSQL锁机制分析》</a></li>
</ul>
<p>介绍：PostgreSQL锁机制分析,<a href="http://mp.weixin.qq.com/s?__biz=MzIwNzEzNDkxNQ==&amp;mid=400897914&amp;idx=1&amp;sn=e83f15ba1b62abfd9e01cd7b08b87cc7&amp;scene=4#wechat_redirect" target="_blank" rel="noopener">第二部分</a></p>
<ul>
<li><a href="http://blog.chinaunix.net/uid-24774106-id-3764994.html" target="_blank" rel="noopener">《FSM》</a></li>
</ul>
<p>介绍：PostgreSQL源码分析之FSM</p>
<ul>
<li><a href="http://blog.chinaunix.net/uid-24774106-id-3764606.html" target="_blank" rel="noopener">《page》</a></li>
</ul>
<p>介绍：PostgreSQL源码分析之page</p>
<ul>
<li><a href="http://blog.chinaunix.net/uid-24774106-id-3761861.html" target="_blank" rel="noopener">《shared buffer状态信息及性能测量 》</a></li>
</ul>
<p>介绍：PostgreSQL源码分析之shared buffer状态信息及性能测量,推荐<a href="http://blog.chinaunix.net/uid-24774106-id-3761272.html" target="_blank" rel="noopener">shared buffer的分配与替换</a>,<a href="http://blog.chinaunix.net/uid-24774106-id-3761123.html" target="_blank" rel="noopener">shared buffer与磁盘文件 </a>,<a href="http://blog.chinaunix.net/uid-24774106-id-3757916.html" target="_blank" rel="noopener">database和table 与磁盘文件的对应</a></p>
<ul>
<li><a href="http://www.cnblogs.com/gaojian/p/3261568.html" target="_blank" rel="noopener">《PostgreSQL内部结构与源代码研究索引页》</a></li>
</ul>
<p>介绍：文章包括pg_stat_statements源代码分析,PostgreSQL的hook机制初步学习,EDB*Plus的client_encoding问题,PostgreSQL的索引膨胀,libpq 与 fe-misc.c,libpq 练习的入口点,Autovacuum 的运行限制,autovacuum 与 vacuum full,autoanalyze 的注意事项,backuplabel file 初步学习,HOT（Heap-Only Tuples）,Checkpoint 发生的时机,checkpoint 活动,pg_buffercache 代码研究,内存结构图示,内存使用增长观察,使用cgroups来控制内存使用,调整内存与IO的参数说明,MVCC图示,ListenSocket 的研究</p>
<ul>
<li><a href="http://blog.csdn.net/huguangshanse00/article/details/40479995" target="_blank" rel="noopener">《CreateLockFile》</a></li>
</ul>
<p>介绍：PostgreSQL CreateLockFile分析</p>
<ul>
<li><a href="http://blog.csdn.net/li_shugan1/article/details/7975571" target="_blank" rel="noopener">《动态Hash》</a></li>
</ul>
<p>介绍：动态Hash</p>
<ul>
<li><a href="http://momjian.us/main/presentations/internals.html" target="_blank" rel="noopener">《Postgres Internals Presentations》</a></li>
</ul>
<p>介绍: PG内部机制分析.</p>
<ul>
<li><a href="http://my.oschina.net/Suregogo/blog/550201" target="_blank" rel="noopener">《为PostgreSQL添加插件》</a></li>
</ul>
<p>介绍: 利用pg的hook机制为pg添加插件.</p>
<ul>
<li><a href="http://blog.163.com/digoal@126/blog/static/163877040201612374931160/" target="_blank" rel="noopener">《PostgreSQL 优化器逻辑推理能力》</a></li>
</ul>
<p>介绍: 源码解析.</p>
<ul>
<li><a href="http://blog.csdn.net/huguangshanse00/article/details/37045847" target="_blank" rel="noopener">《postgres 源码分析之 insert(1)》</a></li>
</ul>
<p>介绍: Insert分析.</p>
<ul>
<li><a href="http://7xtcs7.com1.z0.glb.clouddn.com/PostgreSQL%E6%9F%A5%E8%AF%A2%E5%A4%84%E7%90%86%E9%83%A8%E5%88%86%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90.pdf" target="_blank" rel="noopener">《PostgreSQL查询处理部分源码分析》</a></li>
</ul>
<p>介绍: PostgreSQL查询处理部分源码分析.</p>
<ul>
<li><a href="http://www.docin.com/p-271989068.html" target="_blank" rel="noopener">《PostgreSQL查询处理部分源码分析》</a></li>
</ul>
<p>介绍:  PostgreSQL查询处理部分源码分析.</p>
<ul>
<li><a href="https://madusudanan.com/blog/understanding-postgres-caching-in-depth/" target="_blank" rel="noopener">《Understanding caching in Postgres》</a></li>
</ul>
<p>介绍:Postgres缓存机制分析.</p>
<ul>
<li><a href="https://blog.codeship.com/discovering-computer-science-behind-postgres-indexes/" target="_blank" rel="noopener">《Discovering the Computer Science Behind Postgres Indexes》</a></li>
</ul>
<p>介绍: Postgres索引分析,推荐先阅读<a href="http://www.csd.uoc.gr/~hy460/pdf/p650-lehman.pdf" target="_blank" rel="noopener">Efficient Locking for Concurrent Operations on B-Trees</a>.</p>
<ul>
<li><a href="http://research.cs.queensu.ca/~cordy/Papers/GC_SCAM10_ConceptCount.pdf" target="_blank" rel="noopener">《Estimating the Optimal Number of Latent Concepts in Source Code Analysis》</a></li>
</ul>
<p>介绍:Estimating the Optimal Number of Latent Concepts in Source Code Analysis.</p>
<ul>
<li><a href="https://wiki.postgresql.org/wiki/Pgkernel" target="_blank" rel="noopener">《Pgkernel》</a></li>
</ul>
<p>介绍:Postgres内核分析系列文章</p>
<ul>
<li><a href="http://www.postgresql.org/docs/manuals/" target="_blank" rel="noopener">《PostgreSQL Documentation》</a></li>
</ul>
<p>介绍：PostgreSQL官方文档主页</p>
<ul>
<li><a href="http://wenku.it168.com/org/145" target="_blank" rel="noopener">《PG技术沙龙ppt》</a></li>
</ul>
<p>介绍：2013年4月PG技术沙龙PPT</p>
<ul>
<li><a href="http://postgres.cn/docs/9.4/" target="_blank" rel="noopener">《PG9.4.4中文翻译文档》</a></li>
</ul>
<p>介绍：PG9.4.4中文翻译文档</p>
<ul>
<li><a href="http://codex.cs.yale.edu/avi/db-book/" target="_blank" rel="noopener">《Database System Concepts Sixth Edition》</a></li>
</ul>
<p>介绍：数据库系统概念(第六版)</p>
<ul>
<li><a href="http://download.csdn.net/detail/lusizeng/8679303" target="_blank" rel="noopener">《PostgreSQL从菜鸟到专家(中译稿 by 洞庭湖的泥鳅)》</a></li>
</ul>
<p>介绍：这篇文档是国内的一线postgreSQL专家所翻译。很经典</p>
<ul>
<li><a href="http://www.pg-versus-ms.com/" target="_blank" rel="noopener">《PostgreSQL vs. MS SQL Server》</a></li>
</ul>
<p>介绍：PostgreSQL与 MS SQL Server的对比,<a href="http://www.oschina.net/translate/postgresql-vs-ms-sql-server" target="_blank" rel="noopener">中文版</a></p>
<ul>
<li><a href="http://blog.163.com/digoal@126/blog/static/16387704020141229159715/" target="_blank" rel="noopener">《PostgreSQL 30天 培训视频》</a></li>
</ul>
<p>介绍：作者<a href="http://blog.163.com/digoal@126/" target="_blank" rel="noopener">德哥@Digoal</a>从事pg截止目前大概有7-8年，长期活跃在国内的pg社区。这套PostgreSQL 30天 培训视频包含了SQL基础,备份恢复,HA,服务端编程,大数据,内核,应用案例等，非常适合新手</p>
<ul>
<li><a href="http://blog.163.com/digoal@126/blog/static/163877040201172183022203/" target="_blank" rel="noopener">《PostgreSQL爱好者的参考资料推荐》</a></li>
</ul>
<p>介绍：PostgreSQL爱好者的参考资料推荐</p>
<ul>
<li><a href="http://www.postgresqlstudio.org/" target="_blank" rel="noopener">《PostgreSQL Studio》</a></li>
</ul>
<p>介绍：PostgreSQL Studio 是开源的 PostgreSQL 数据库的 Web 接口。可以让你直接在浏览器上编辑数据库代码，浏览数据库模型和运行 SQL 语句。这是一个数据库管理工具，侧重于开发。</p>
<ul>
<li><a href="http://code.google.com/p/pqc/" target="_blank" rel="noopener">《PostgreSQL Query Cache》</a></li>
</ul>
<p>介绍：PostgreSQL Query Cache 一个新的开源软件，用来极速提升 PostgreSQL 数据库的查询性能，通过缓存查询结果，可提升 10 ~ 100 倍。</p>
<ul>
<li><a href="http://python.projects.pgfoundry.org/" target="_blank" rel="noopener">《py-postgresql》</a></li>
</ul>
<p>介绍：Python的PostgreSQL驱动。</p>
<ul>
<li><a href="http://www.postgres-xl.org/" target="_blank" rel="noopener">《Postgres-XL》</a></li>
</ul>
<p>介绍： 一个构建PostgreSQL集群开源软件,Postgres-XL is a PostgreSQL-based scale-out cluster that handles both OLTP write intensive workloads as well as OLAP/BI type of workloads thanks to MPP parallelism.。</p>
<ul>
<li><a href="http://sourceforge.net/projects/pgdesigner/" target="_blank" rel="noopener">《pgDesigner》</a></li>
</ul>
<p>介绍：pgDesigner 是一个为PostgreSQL数据库设计的建模工具.仅支持Linux。</p>
<ul>
<li><a href="https://github.com/sosedoff/pgweb/" target="_blank" rel="noopener">《pgweb》</a></li>
</ul>
<p>介绍：一个采用 Go 语言开发的基于 Web 的 PostgreSQL 管理系统。</p>
<ul>
<li><a href="http://www.cybertec.at/postgresql_produkte/pgwatch-cybertec-enterprise-postgresql-monitor/" target="_blank" rel="noopener">《pgwatch》</a></li>
</ul>
<p>介绍：一个简单易用的 PostgreSQL 的监控工具，支持 PostgreSQL 9.0 以及更新的版本。</p>
<ul>
<li><a href="http://www.pgpool.net/mediawiki/index.php/Main_Page" target="_blank" rel="noopener">《pgpool-II》</a></li>
</ul>
<p>介绍：pgpool-II 是运行于 PostgreSQL 数据库服务器和客户端之间的一个中间件，提供的功能包括：连接池、复制、负载均衡、客户端限制和并行查询等。</p>
<ul>
<li><a href="http://pgcluu.darold.net/" target="_blank" rel="noopener">《pgCluu》</a></li>
</ul>
<p>介绍：pgCluu 是一个对 PostgreSQL 集群性能进行完整审计的工具，该工具分为两部分：</p>
<ol>
<li>collector 收集器用于从 PostgreSQL 集群中获取统计数据，使用 psql 和 sar 工具</li>
<li>grapher 关于生成 HTML 报表和图表 数据库服务器和客户端之间的一个中间件，提供的功能包括：连接池、复制、负载均衡、客户端限制和并行查询等。</li>
</ol>
<ul>
<li><a href="https://github.com/citusdata/cstore_fdw" target="_blank" rel="noopener">《cstore_fdw》</a></li>
</ul>
<p>介绍：cstore_fdw 实现了 PostgreSQL 数据库的柱状存储，用于对批量加载的数据进行分析的场景。</p>
<ul>
<li><a href="http://www.pgbarman.org/" target="_blank" rel="noopener">《Barman for PostgreSQL》</a></li>
</ul>
<p>介绍：Barman (备份和恢复管理器) for PostgreSQL 是 PostgreSQL 数据库服务器的灾难恢复工具，允许远程备份多个服务器，帮助 DBA 在数据恢复阶段的关键工作。</p>
<ul>
<li><a href="http://www.pgbarman.org/" target="_blank" rel="noopener">《pgFouine》</a></li>
</ul>
<p>介绍：pgFouine 是一个 PostgreSQL 的日志分析软件，可以让你对 PostgreSQL 数据库的运行状态有个清晰的了解，同时对一些慢查询、使用频率最高的查询、错误生成相应的报表和图表。</p>
<ul>
<li><a href="http://news.dice.com/2014/11/24/substitute-postgresql-nosql-needs/" target="_blank" rel="noopener">《Substitute PostgreSQL for Your NoSQL Needs》</a></li>
</ul>
<p>介绍：用PostgreSQL替换你的NoSQL。</p>
<ul>
<li><a href="http://woss.name/articles/representing-trees-in-postgresql/" target="_blank" rel="noopener">《Representing Trees in PostgreSQL》</a></li>
</ul>
<p>介绍：Representing Trees in PostgreSQL</p>
<ul>
<li><a href="http://michael.otacoo.com/" target="_blank" rel="noopener">《Michael Paquier》</a></li>
</ul>
<p>介绍：推荐一个博客，作者是一位日本的开发者。但是文章写的挺好的。是英文！！</p>
<ul>
<li><a href="http://omniti.com/seeds/writable-ctes-improve-performance" target="_blank" rel="noopener">《Using Writeable CTEs to Improve Performance in PostgreSQL 》</a></li>
</ul>
<p>介绍：使用CTEs来提升你的数据库性能</p>
<ul>
<li><a href="http://chrisdone.com/posts/postgresql-pagination" target="_blank" rel="noopener">《Fast pagination on PostgreSQL》</a></li>
</ul>
<p>介绍：PostgreSQL的快速分页</p>
<ul>
<li><a href="https://www.florian-schlachter.de/post/upgrading-postgres-9-3-9-4/" target="_blank" rel="noopener">《Upgrading your PostgreSQL cluster from 9.3 to 9.4 》</a></li>
</ul>
<p>介绍：把你的PostgreSQL集群从9.3升级到9.4.</p>
<ul>
<li><a href="http://www.citusdata.com/blog/86-making-postgresql-scale-hadoop-style" target="_blank" rel="noopener">《Making PostgreSQL scale Hadoop-style: Benchmark numbers》</a></li>
</ul>
<p>介绍：Making PostgreSQL scale Hadoop-style: Benchmark numbers</p>
<ul>
<li><a href="http://engineroom.trackmaven.com/blog/so-you-want-another-postgresql-database-part-1" target="_blank" rel="noopener">《So You Want Another PostgreSQL Database？》</a></li>
</ul>
<p>介绍：还有<a href="http://engineroom.trackmaven.com/blog/so-you-want-another-postgresql-database-part-2/" target="_blank" rel="noopener">part2</a></p>
<ul>
<li><a href="http://rob.conery.io/2012/07/19/postgresql-rising/" target="_blank" rel="noopener">《PostgreSQL Rising》</a></li>
</ul>
<p>介绍：PostgreSQL的成长</p>
<ul>
<li><a href="http://rny.io/nginx/postgresql/2013/07/26/simple-api-with-nginx-and-postgresql.html" target="_blank" rel="noopener">《Simple API with Nginx and PostgreSQL》</a></li>
</ul>
<p>介绍：如何建一个简单的REST API 仅仅使用 Nginx 和 PostgreSQL.如果不理解REST API这里推荐<a href="http://www.ruanyifeng.com/blog/2014/05/restful_api.html" target="_blank" rel="noopener">RESTful API 设计指南</a>、<a href="http://www.ruanyifeng.com/blog/2011/09/restful.html" target="_blank" rel="noopener">理解RESTful架构</a></p>
<ul>
<li><a href="https://github.com/tetsuo/hypervault" target="_blank" rel="noopener">《hypervault》</a></li>
</ul>
<p>介绍：PostgreSQL connection manager for scalability freaks.</p>
<ul>
<li><a href="https://www.pgcon.org/2014/schedule/attachments/309_PG_as_bench_mark.pdf" target="_blank" rel="noopener">《PostgreSQL as a benchmarking tool》</a></li>
</ul>
<p>介绍：PostgreSQL as a benchmarking tool</p>
<ul>
<li><a href="http://www.pgcon.org/2014/schedule/index.en.html" target="_blank" rel="noopener">《2014年 PGcon会议paper》</a></li>
</ul>
<p>介绍：2014年 PGcon会议paper，进去之后你还可以发现往年的paper。</p>
<ul>
<li><a href="http://www.psequel.com/" target="_blank" rel="noopener">《PSequel》</a></li>
</ul>
<p>介绍： Mac OS X端的PostgreSQL图形管理工具</p>
<ul>
<li><a href="http://blog.heapanalytics.com/postgresqls-powerful-new-join-type-lateral/" target="_blank" rel="noopener">《PostgreSQL’s Powerful New Join Type:LATERAL》</a></li>
</ul>
<p>介绍： PostgreSQL’s Powerful New Join Type: LATERAL，这个类型是在9.3的版本中开始的。</p>
<ul>
<li><a href="http://momjian.us/main/writings/pgsql/hw_performance/" target="_blank" rel="noopener">《PostgreSQL Hardware Performance Tuning》</a></li>
</ul>
<p>介绍：PostgreSQL的硬件性能调优。</p>
<ul>
<li><a href="http://momjian.us/main/writings/pgsql/aw_pgsql_book/" target="_blank" rel="noopener">《PostgreSQL: Introduction and Concepts Bruce Momjian》</a></li>
</ul>
<p>介绍：入门型电子书籍,书有点老了2001年的了。此外这本书的作者还有一个<a href="http://momjian.us/main/writings/pgsql/" target="_blank" rel="noopener">资源页</a>，里面有很多的干货。作者是enterpriseDB的工程师。经典文章还有<a href="http://momjian.us/main/writings/pgsql/writing_apps.pdf" target="_blank" rel="noopener">Writing PostgreSQL Applications</a>.</p>
<ul>
<li><a href="http://blogs.enterprisedb.com/2014/12/03/compiling-plv8-with-postgres-plus-advanced-server-2/" target="_blank" rel="noopener">《Compiling PLV8 with Postgres Plus Advanced Server》</a></li>
</ul>
<p>介绍：<a href="https://code.google.com/p/plv8js/wiki/PLV8" target="_blank" rel="noopener">什么是PLV8？</a>,魅力就是:用js写SQL</p>
<ul>
<li><a href="https://archive.fosdem.org/2014/schedule/track/postgresql/" target="_blank" rel="noopener">《fosdem 2014年PostgreSQL议题(含视频)》</a></li>
</ul>
<p>介绍:<a href="http://en.wikipedia.org/wiki/FOSDEM" target="_blank" rel="noopener">fosdem</a>是一个开源性组织,这个只是会议的一部分，从2001年开始到目前历经13年的<a href="https://archive.fosdem.org/" target="_blank" rel="noopener">资料</a>都被保存着，如果你有需要可以自己去翻阅。干货很多，另外2015年的议题已经开始筹备了<a href="https://fosdem.org/2015/" target="_blank" rel="noopener">官方地址</a></p>
<p>*<a href="http://rhaas.blogspot.jp/2014/03/postgresql-now-has-logical-decoding.html" target="_blank" rel="noopener">《PostgreSQL Now Has Logical Decoding》</a></p>
<p>介绍：PostgreSQL Now Has Logical Decoding,此外作者也是一位enterpriseDB的工程师，他的其他<a href="http://rhaas.blogspot.jp/" target="_blank" rel="noopener">博文</a>也很精彩.</p>
<ul>
<li><a href="http://www.pgconf.us/2014/schedule/" target="_blank" rel="noopener">《美国2014年pgconf paper》</a></li>
</ul>
<p>介绍：美国2014年pgconf paper。</p>
<ul>
<li><a href="https://github.com/maxlapshin/mysql2postgres" target="_blank" rel="noopener">《mysql2postgres》</a></li>
</ul>
<p>介绍：把MySQL迁移至postgreSQL?不如试试这个工具吧</p>
<ul>
<li><a href="https://www.quora.com/What-are-the-advantages-and-disadvantages-of-using-PostgreSQL-over-MySQL" target="_blank" rel="noopener">《What are the advantages and disadvantages of using PostgreSQL over MySQL?》</a></li>
</ul>
<p>介绍：使用PG与MySQL比较有那些有点和缺点？</p>
<ul>
<li><a href="http://blog.lostpropertyhq.com/postgres-full-text-search-is-good-enough/" target="_blank" rel="noopener">《Postgres full-text search is Good Enough!》</a></li>
</ul>
<p>介绍：Postgres的全文查询其实也很棒：多语言支持，模糊查询等，这篇文章说的很详细。而且里面有很多实际例子</p>
<ul>
<li><a href="http://security.stackexchange.com/a/2536" target="_blank" rel="noopener">《PostgreSQL Security Audit》</a></li>
</ul>
<p>介绍：数据库安全问题一直是一个问题热门话题，PostgreSQL资料更是少之有少。这篇文章值得推荐。建议多多留意<a href="http://www.cvedetails.com/vulnerability-list/vendor_id-336/product_id-575/Postgresql-Postgresql.html" target="_blank" rel="noopener">postgresql security Vulnerabilities</a>、<a href="http://lwn.net/Articles/546550/" target="_blank" rel="noopener">Vulnerability handling in the PostgreSQL project</a>、<a href="https://docs.newrelic.com/docs/apm/traces/transaction-traces/security-postgresql-explain-plans" target="_blank" rel="noopener">Security for PostgreSQL explain plans</a>、<a href="http://blog.2ndquadrant.com/postgresql-row-security-overview/" target="_blank" rel="noopener">Row security in PostgreSQL</a></p>
<ul>
<li><a href="http://blog.osdba.net/525.html" target="_blank" rel="noopener">《使用oracle_fdw进行增量数据迁移的神奇方法》</a></li>
</ul>
<p>介绍:Oracle增量数据迁移到postgres方法，此外博主还有其他非常棒的文章。推荐也可以看看</p>
<ul>
<li><a href="http://blog.2ndquadrant.com/ware-yosemite-possible-postgresql-upgrade-issues-os-x-10-10/" target="_blank" rel="noopener">《Ware Yosemite? Possible PostgreSQL upgrade issues in OS X 10.10》</a></li>
</ul>
<p>介绍:PostgreSQL升级在 Yosemite出现问题？可以参考一下这里。同样的也还有其他的文章也很不错</p>
<ul>
<li><a href="http://michael.otacoo.com/" target="_blank" rel="noopener">《Open source developer based in Japan》</a></li>
</ul>
<p>介绍:如题，是日本一个开源项目博客，里面有很多postgresql的最新特性介绍(截止目前2014.12.13已有pg9.5的特性预览了)</p>
<ul>
<li><a href="http://pgxn.org/" target="_blank" rel="noopener">《PGXN: PostgreSQL Extension Network》</a></li>
</ul>
<p>介绍:一个存放PostgreSQL扩展库的资源库,很多扩展插件都能够在这个里面找到</p>
<ul>
<li><a href="http://www.slideshare.net/kaigai/gpgpu-accelerates-postgresql" target="_blank" rel="noopener">《GP GPU  Accelerates PostgreSQL》</a></li>
</ul>
<p>介绍：GPU对pg数据库的加速优化</p>
<ul>
<li><a href="http://www.slideshare.net/petereisentraut/porting-oracle-applications-to-postgresql" target="_blank" rel="noopener">《Porting Oracle Applications to PostgreSQL》</a></li>
</ul>
<p>介绍：从Oracle迁移到pg，此外该作者还有一篇迁移的<a href="http://www.slideshare.net/petereisentraut/porting-applications-from-oracle-to-postgre-sql" target="_blank" rel="noopener">ppt</a>.</p>
<ul>
<li><a href="http://www.slideshare.net/justatheory/building-and-distributing-postgresql-extensions-without-learning-c" target="_blank" rel="noopener">《Building and Distributing PostgreSQL Extensions Without Learning C》</a></li>
</ul>
<p>介绍：即使没有C，你也可以扩展pg</p>
<ul>
<li><a href="https://stripe.com/blog/pagerduty-analytics-with-pd2pg" target="_blank" rel="noopener">《PagerDuty analytics with Postgres》</a></li>
</ul>
<p>介绍：使用PagerDuty做pg分析</p>
<ul>
<li><a href="https://gocardless.com/blog/syncing-postgres-to-elasticsearch-lessons-learned/" target="_blank" rel="noopener">《Syncing Postgres to Elasticsearch: lessons learned》</a></li>
</ul>
<p>介绍：Elasticsearch是一个实时的分布式搜索和分析引擎,这篇文章是讲述作者在做pg同步到Elasticsearch的时候的一些经验之谈，如果有相关需要的建议阅读．如果不明白什么是E<a href="http://www.elasticsearch.org/" target="_blank" rel="noopener">lasticsearch</a>，可以先看看<a href="http://fuxiaopang.gitbooks.io/learnelasticsearch/" target="_blank" rel="noopener">Elasticsearch权威指南</a></p>
<ul>
<li><a href="https://github.com/itissid/pypgTAP" target="_blank" rel="noopener">《pypgTAP》</a></li>
</ul>
<p>介绍：Making Postgres coding and testing fun!</p>
<ul>
<li><a href="http://geoffrey.io/backuping-postgresql-in-docker.html" target="_blank" rel="noopener">《Backuping PostgreSQL with Docker》</a></li>
</ul>
<p>介绍：备份基于Docker的PostgreSQL数据库,国内有<a href="http://dockerone.com/article/118" target="_blank" rel="noopener">中文版</a></p>
<ul>
<li><a href="http://raghavt.blogspot.com/2011/04/postgresql-90-memory-processes.html" target="_blank" rel="noopener">《postgresql 9.0 memory processes》</a></li>
</ul>
<p>介绍：PostgreSQL 9.0 内存 &amp; 进程，感觉英语吃力的朋友可以阅读<a href="http://dreamer-yzy.github.io/2015/01/09/-%E7%BF%BB%E8%AF%91-PostgreSQL-9-0-%E5%86%85%E5%AD%98-%E8%BF%9B%E7%A8%8B/" target="_blank" rel="noopener">中文版</a></p>
<ul>
<li><a href="http://raghavt.blogspot.com/2011/04/postgresql-90-architecture.html" target="_blank" rel="noopener">《postgresql 9.0 architecture》</a></li>
</ul>
<p>介绍： 本篇文章讲述了PostgreSQL 9.0 构架，<a href="http://dreamer-yzy.github.io/2015/01/08/-%E7%BF%BB%E8%AF%91-PostgreSQL-9-0-%E6%9E%84%E6%9E%B6/" target="_blank" rel="noopener">中文版</a></p>
<ul>
<li><a href="http://raghavt.blogspot.com/2011/11/deadlocks-in-postgresql.html" target="_blank" rel="noopener">《Deadlocks in PostgreSQL》</a></li>
</ul>
<p>介绍： PostgreSQL中的死锁，<a href="http://dreamer-yzy.github.io/2015/01/14/-%E7%BF%BB%E8%AF%91-PostgreSQL%E4%B8%AD%E7%9A%84%E6%AD%BB%E9%94%81/" target="_blank" rel="noopener">中文版</a></p>
<ul>
<li><a href="http://raghavt.blogspot.com/2011/05/postgresql-90-backup-recovery.html" target="_blank" rel="noopener">《PostgreSQL 9.0 Backup &amp; Recovery》</a></li>
</ul>
<p>介绍： 本篇文章讲述了PostgreSQL 9.0 备份 &amp; 恢复架，<a href="http://dreamer-yzy.github.io/2015/01/13/-%E7%BF%BB%E8%AF%91-PostgreSQL-9-0-%E5%A4%87%E4%BB%BD-%E6%81%A2%E5%A4%8D/" target="_blank" rel="noopener">中文版</a></p>
<ul>
<li><a href="http://www.infoq.com/cn/news/2015/01/postgresql-elasticsearch" target="_blank" rel="noopener">《将数据从PostgreSQL同步到Elasticsearch的经验总结》</a></li>
</ul>
<p>介绍： 将数据从PostgreSQL同步到Elasticsearch的经验总结</p>
<ul>
<li><a href="http://www.vldb.org/pvldb/vol6/" target="_blank" rel="noopener">《数据库相论文推荐》</a></li>
</ul>
<p>介绍： 索引，查询，磁盘，优化，挖掘，集群，数据恢复，高可用，高性能等等，这些仅仅是一部分而已，在<a href="http://www.vldb.org/pvldb/" target="_blank" rel="noopener">主页</a>上面有2014年一年的数据库相关论文</p>
<ul>
<li><a href="http://pgloader.io/" target="_blank" rel="noopener">《pgloader》</a></li>
</ul>
<p>介绍： postgresql的一数据导入工具，支持csv, 数据迁移</p>
<ul>
<li><a href="https://github.com/mihailShumilov/mysql2postgresql" target="_blank" rel="noopener">《mysql schema to postgresql》</a></li>
</ul>
<p>介绍：Converter mysql schema and data to postgresql</p>
<ul>
<li><a href="http://www.pgsql.ru/db/pgsearch/" target="_blank" rel="noopener">《Search PostgreSQL sites》</a></li>
</ul>
<p>介绍：一个PostgreSQL资料搜索引擎.</p>
<ul>
<li><a href="http://www.postgresqltutorial.com/" target="_blank" rel="noopener">《PostgreSQL Tutorial》</a></li>
</ul>
<p>介绍：一个PostgreSQL入门教程站点，新手上路.</p>
<ul>
<li><a href="http://hans.io/blog/2014/03/25/postgresql_cluster/" target="_blank" rel="noopener">《PostgreSQL: CLUSTER table USING index》</a></li>
</ul>
<p>介绍：对CLUSTER表使用索引.</p>
<ul>
<li><a href="http://blog.endpoint.com/2014/11/when-postgres-will-not-start.html" target="_blank" rel="noopener">《When Postgres will not start》</a></li>
</ul>
<p>介绍：当数据库无法启动的时候,我们应该如何做.</p>
<ul>
<li><a href="http://www.craigkerstiens.com/2014/05/22/on-connection-pooling/" target="_blank" rel="noopener">《Postgres and Connection Pooling》</a></li>
</ul>
<p>介绍：作者的<a href="http://www.craigkerstiens.com/" target="_blank" rel="noopener">博客</a>还有很多干货.</p>
<ul>
<li><a href="https://pgbouncer.github.io/" target="_blank" rel="noopener">《PgBouncer》</a></li>
</ul>
<p>介绍：PGBouncer是一个轻量级的针对PostgreSQL的数据库连接池工具，能够给客户端提供一个统一的链接视图.</p>
<ul>
<li><a href="https://wiki.postgresql.org/wiki/PGQ_Tutorial" target="_blank" rel="noopener">《PGQ 》</a></li>
</ul>
<p>介绍：PGQ is the queueing solution from Skytools. The Londiste replication solution is a consumer daemon built on PGQ, and the API is accessible for you to create any asynchronous processing facility, based on queuing.<a href="https://github.com/kostya/pgq" target="_blank" rel="noopener">github</a>.</p>
<ul>
<li><a href="https://www.youtube.com/watch?v=j642n39oBgQ" target="_blank" rel="noopener">《Implementing High Availability with PostgreSQL》</a></li>
</ul>
<p>介绍：实现一个高可用PostgreSQL集群,YoutuBe上更多<a href="https://www.youtube.com/results?search_query=postgresql+cluster" target="_blank" rel="noopener">PostgreSQL cluster</a>视频.</p>
<ul>
<li><a href="https://github.com/numtel/meteor-pg" target="_blank" rel="noopener">《numtel:pg》</a></li>
</ul>
<p>介绍：Reactive PostgreSQL for Meteor.</p>
<ul>
<li><a href="https://lob.com/blog/supercharge-your-postgresql-performance/" target="_blank" rel="noopener">《Slow PostgreSQL Performance? Don’t Forget to Vacuum your Database》</a></li>
</ul>
<p>介绍：数据库性能优化之Vacuum.</p>
<ul>
<li><a href="http://www.depesz.com/" target="_blank" rel="noopener">《select * from depesz;》</a></li>
</ul>
<p>介绍：里面有很多pg的最新资料,例如新版本的功能,技巧等.</p>
<ul>
<li><a href="http://bdr-project.org/docs/next/index.html" target="_blank" rel="noopener">《BDR 0.10.0 Documentation》</a></li>
</ul>
<p>介绍：<a href="http://2ndquadrant.com/en/resources/bdr/" target="_blank" rel="noopener">BDR</a>新的文档,使用的数据库版本是9.4的,BDR可以帮助你更好的建立一个pg集群.</p>
<ul>
<li><a href="http://blog.tarkalabs.com/2015/04/16/managing-big-enough-data-in-postgres/" target="_blank" rel="noopener">《Managing big enough data in postgres》</a></li>
</ul>
<p>介绍：pg中的大规模数据管理经验.</p>
<ul>
<li><a href="http://codex.cs.yale.edu/avi/db-book/" target="_blank" rel="noopener">《Database System Concepts Sixth Edition》</a></li>
</ul>
<p>介绍：耶鲁大学的数据库系统概念课件.</p>
<ul>
<li><a href="https://wiki.postgresql.org/images/e/e3/Hooks_in_postgresql.pdf" target="_blank" rel="noopener">《Hooks in PostgreSQL》</a></li>
</ul>
<p>介绍：PostgreSQL的hook机制介绍.如果有困难可以先看看<a href="http://www.cnblogs.com/gaojian/p/3259147.html" target="_blank" rel="noopener">简单的使用介绍</a>，此外这位博主的<a href="http://www.cnblogs.com/gaojian/p/topindex.html" target="_blank" rel="noopener">其他pg文章</a>也不错.</p>
<ul>
<li><a href="http://www.postgresql.org.es/sites/default/files/ERL-M87-06.pdf" target="_blank" rel="noopener">《The design of the postgres storage system》</a></li>
</ul>
<p>介绍：Postgres存储系统设计论文.</p>
<ul>
<li><a href="http://www.postgresql.org.es/sites/default/files/ERL-M85-95.pdf" target="_blank" rel="noopener">《The design of the postgres》</a></li>
</ul>
<p>介绍：Postgres设计论文.</p>
<ul>
<li><a href="http://www.postgresql.org.es/sites/default/files/ERL-M85-95.pdf" target="_blank" rel="noopener">《The Design of the POSTGRES Rules System》</a></li>
</ul>
<p>介绍：The Design of the POSTGRES Rules System.</p>
<ul>
<li><a href="http://www.postgresql.org/docs/devel/static/biblio.html" target="_blank" rel="noopener">《PostgreSQL官方推荐文献》</a></li>
</ul>
<p>介绍：PostgreSQL官方推荐文献.</p>
<ul>
<li><a href="http://wshan.net/bigdata/read1.pdf" target="_blank" rel="noopener">《Anatomy of a Database System》</a></li>
</ul>
<p>介绍：数据库内部结构剖析.</p>
<ul>
<li><a href="http://pgtune.leopard.in.ua/" target="_blank" rel="noopener">《PGtune》</a></li>
</ul>
<p>介绍：PostgreSQL性能调优工具,只需要输入机器配置即可获得相应的推荐优化参数.</p>
<ul>
<li><a href="https://robots.thoughtbot.com/postgresql-performance-considerations" target="_blank" rel="noopener">《PostgreSQL performance considerations》</a></li>
</ul>
<p>介绍：很多讲 PostgreSQL 优化的文章都提到了 Partial indexes<a href="http://www.postgresql.org/docs/9.4/static/indexes-partial.html" target="_blank" rel="noopener">Partial indexes</a>，简单的说，它是一个通过 WHERE 过滤后的子集数据的索引，虽然 MySQL 里也有这个名词，但完全不是一个东西。案例：㈠ <a href="http://instagram-engineering.tumblr.com/post/40781627982/handling-growth-with-postgres-5-tips-from" target="_blank" rel="noopener">Handling Growth with Postgres: 5 Tips From Instagram</a> ㈡ <a href="http://blog.heapanalytics.com/speeding-up-postgresql-queries-with-partial-indexes/" target="_blank" rel="noopener">Speeding Up PostgreSQL With Partial Indexes</a>.</p>
<ul>
<li><a href="http://www.postgresguide.com/index.html" target="_blank" rel="noopener">《Postgres Guide》</a></li>
</ul>
<p>介绍：Postgres的指南主要强调在Postgre存在的最佳实践和强大的功能.</p>
<ul>
<li><a href="http://linuxfinances.info/info/postgresqlperformance.html" target="_blank" rel="noopener">《PostgreSQL Performance Tuning》</a></li>
</ul>
<p>介绍：PostgreSQL性能调优,作者的其他<a href="http://linuxfinances.info/info/postgresql.html" target="_blank" rel="noopener">关于PostgreSQL文章</a>也不错.</p>
<ul>
<li><a href="http://www.postgresql.org/developer/backend/" target="_blank" rel="noopener">《PostgreSQL Backend Flowchart》</a></li>
</ul>
<p>介绍： PostgreSQL 内核学习.</p>
<ul>
<li><a href="http://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=postgresql" target="_blank" rel="noopener">《PostgreSQL Vulnerability》</a></li>
</ul>
<p>介绍： PostgreSQL漏洞库.</p>
<ul>
<li><a href="https://blog.lateral.io/2015/05/full-text-search-in-milliseconds-with-postgresql/" target="_blank" rel="noopener">《Full text search in milliseconds with PostgreSQL》</a></li>
</ul>
<p>介绍： PostgreSQL毫秒级全文本搜索.</p>
<ul>
<li><a href="http://www.varlena.com/GeneralBits/Tidbits/annotated_conf_e.html" target="_blank" rel="noopener">《Annotated postgresql.conf and Global User Configuration (GUC) Guide》</a></li>
</ul>
<p>介绍： postgresql.conf配置文件注释.</p>
<ul>
<li><a href="http://blog.confluent.io/2015/04/23/bottled-water-real-time-integration-of-postgresql-and-kafka/" target="_blank" rel="noopener">《Bottled Water: Real-time integration of PostgreSQL and Kafka》</a></li>
</ul>
<p>介绍：利用Postgres 9.4的新功能Logical Decoding，实时stream所有SQL操作到Kafka，然后下游的各种consumer从Kafka中接收。其实就是Write-ahead logging的广义应用</p>
<ul>
<li><a href="https://www.compose.io/articles/is-postgresql-your-next-json-database/" target="_blank" rel="noopener">《Is PostgreSQL Your Next JSON Database?》</a></li>
</ul>
<p>介绍： Is PostgreSQL Your Next JSON Database?.</p>
<ul>
<li><a href="http://blog.2ndquadrant.com/nosql-postgresql-9-4-jsonb/" target="_blank" rel="noopener">《NoSQL with PostgreSQL 9.4 and JSONB》</a></li>
</ul>
<p>介绍： NoSQL with PostgreSQL 9.4 and JSONB.</p>
<ul>
<li><a href="http://www.linuxjournal.com/content/postgresql-nosql-database" target="_blank" rel="noopener">《PostgreSQL, the NoSQL Database》</a></li>
</ul>
<p>介绍： PostgreSQL, the NoSQL Database.</p>
<ul>
<li><a href="http://blog.codacy.com/2015/05/14/how-to-update-large-tables-in-postgresql/" target="_blank" rel="noopener">《How to update large tables in PostgreSQL》</a></li>
</ul>
<p>介绍： PostgreSQL如何更新大表.</p>
<ul>
<li><a href="http://www.postgresql.org/docs/devel/static/error-style-guide.html" target="_blank" rel="noopener">《PostgreSQL:Error Message Style Guide》</a></li>
</ul>
<p>介绍： PostgreSQL错误信息编码指南.</p>
<ul>
<li><a href="https://www.citusdata.com/blog/156-compressing-jsonb-using-cstore-fdw" target="_blank" rel="noopener">《Compressing PostgreSQL JSONB data 12x using cstore_fdw》</a></li>
</ul>
<p>介绍： cstore_fdw压缩PostgreSQL数据.</p>
<ul>
<li><a href="http://lwn.net/SubscriberLink/645020/e1ba36cff8248df0/" target="_blank" rel="noopener">《PostgreSQL: the good, the bad, and the ugly》</a></li>
</ul>
<p>介绍： PostgreSQL评价.</p>
<ul>
<li><a href="http://www.hankinsoft.com/SQLProPostgres/" target="_blank" rel="noopener">《SQLPro for PostgresSQL》</a></li>
</ul>
<p>介绍： Mac OS X上的PostgreSQL管理器.</p>
<ul>
<li><a href="https://www.youtube.com/watch?v=pbg97bkxbbY&amp;utm_source=postgresweekly&amp;utm_medium=email" target="_blank" rel="noopener">《PostgreSQL 9.5’s Upsert Feature Explained》</a></li>
</ul>
<p>介绍: PostgreSQL 9.5新特性Upsert解释 .</p>
<ul>
<li><a href="http://www.vertabelo.com/blog/technical-articles/postgresql-database-replication" target="_blank" rel="noopener">《PostgreSQL database replication》</a></li>
</ul>
<p>介绍:PostgreSQL的复制.</p>
<ul>
<li><a href="http://momjian.us/main/blogs/pgblog/2015.html" target="_blank" rel="noopener">《YeSQL: Battling the NoSQL Hype Cycle with Postgres》</a></li>
</ul>
<p>介绍： YeSQL: Battling the NoSQL Hype Cycle with Postgres,博客的<a href="http://momjian.us/main/blogs/pgblog/2015.html" target="_blank" rel="noopener">其他内容</a>也不错.</p>
<ul>
<li><a href="http://pgtap.org/" target="_blank" rel="noopener">《pgTAP》</a></li>
</ul>
<p>介绍:pgTAP is a unit testing framework for PostgreSQL written in PL/pgSQL and PL/SQL.</p>
<ul>
<li><a href="http://www.commandprompt.com/ppbook/?page=ppbook" target="_blank" rel="noopener">《Practical PostgreSQL》</a></li>
</ul>
<p>介绍: 免费的pg电子书《PostgreSQL实践》,书虽然有点老,但是很多知识点是可以通用的.</p>
<ul>
<li><a href="http://momjian.us/main/writings/pgsql/aw_pgsql_book/" target="_blank" rel="noopener">《PostgreSQL: Introduction and Concepts》</a></li>
</ul>
<p>介绍:PostgreSQL介绍与入门,免费在线电子书,<a href="http://momjian.us/main/writings/pgsql/bookfigs.pdf" target="_blank" rel="noopener">pdf版</a>,入门的还有<a href="http://momjian.us/main/writings/pgsql/Get_to_know_PostgreSQL.pdf" target="_blank" rel="noopener">Get to know PostgreSQL</a>.</p>
<ul>
<li><a href="http://momjian.us/main/writings/pgsql/administration.pdf" target="_blank" rel="noopener">《Mastering PostgreSQL Administration》</a></li>
</ul>
<p>介绍:PostgreSQL管理入门,非常全,此外作者写了很多关于pg的<a href="http://momjian.us/main/writings/pgsql/" target="_blank" rel="noopener">ppt和文档</a>,也很精彩.</p>
<ul>
<li><a href="https://wiki.postgresql.org/wiki/Postgres-XC" target="_blank" rel="noopener">《Postgres-XC》</a></li>
</ul>
<p>介绍: Postgres-XC 是一种提供写可靠性,多主节点数据同步,数据传输的开源集群方案.</p>
<ul>
<li><a href="http://www.pgcon.org/2015/schedule/" target="_blank" rel="noopener">《PGCon 2015 演讲稿》</a></li>
</ul>
<p>介绍: PGCon 2015 演讲稿下载.</p>
<ul>
<li><a href="http://www.enterprisedb.com/postgres-plus-edb-blog/robert-haas/postgresql-shutdown" target="_blank" rel="noopener">《PostgreSQL Shutdown》</a></li>
</ul>
<p>介绍: PG停止服务评析.</p>
<ul>
<li><a href="http://www.enterprisedb.com/postgres-plus-edb-blog/robert-haas/first-rule-securing-postgres-don-t-be-dumb" target="_blank" rel="noopener">《First Rule in Securing Postgres: Don’t Be Dumb》</a></li>
</ul>
<p>介绍: pg的安全规则建议,共5点,第一点就是Don’t be dumb!,enterprisedb的<a href="http://www.enterprisedb.com/postgres-plus-edb-blog" target="_blank" rel="noopener">官方博客</a>资源还真的比较丰富,例如还有中文版的<a href="http://www.enterprisedb.com/docs/cn/8.3R2/oracompat/EnterpriseDB_OraCompat_8.3_CN-01.htm" target="_blank" rel="noopener">Postgres Plus Advanced Server与oracle兼容文档</a>.</p>
<ul>
<li><a href="http://arxiv.org/pdf/1208.4179v1.pdf" target="_blank" rel="noopener">《Serializable Snapshot Isolation in PostgreSQL》</a></li>
</ul>
<p>介绍: PG中的可串行化快照隔离.</p>
<ul>
<li><a href="https://wiki.postgresql.org/wiki/Converting_from_other_Databases_to_PostgreSQL" target="_blank" rel="noopener">《Converting from other Databases to PostgreSQL》</a></li>
</ul>
<p>介绍: 其他数据库向psotgresql迁移数据的工具,官方出品，包括 MySQL, MS SQL Server, SQL Azure, Oracle, MS Access.等.</p>
<ul>
<li><a href="http://pan.baidu.com/s/1bnnqEHx" target="_blank" rel="noopener">《深度学习PostgreSQL》</a></li>
</ul>
<p>介绍: 从安装到双机热备再到内核分析,内容丰富网盘提取密码<code>fmby</code>.</p>
<ul>
<li><a href="http://pgcli.com/" target="_blank" rel="noopener">《Postgres CLI with autocompletion and syntax highlighting》</a></li>
</ul>
<p>介绍: pgcli是一个PostgreSQL命令行工具,提供了语法高亮以及自动补全的功能.</p>
<ul>
<li><a href="http://postgresguide.com/" target="_blank" rel="noopener">《Postgres Guid》</a></li>
</ul>
<p>介绍: Postgres入门指南,从安装到优化,也讲到了非标准数据类型JSON,hstor等.</p>
<ul>
<li><a href="https://devcenter.heroku.com/articles/postgresql-indexes#partial-indexes" target="_blank" rel="noopener">《Efficient Use of PostgreSQL Indexes》</a></li>
</ul>
<p>介绍: 本文介绍了如何高效的使用pg的索引,很详细.讲到了很多容易被初学者容易疏忽的地方.</p>
<ul>
<li><a href="http://www.cnblogs.com/stephen-liu74/archive/2012/06/08/2315679.html" target="_blank" rel="noopener">《PostgreSQL学习手册(目录)》</a></li>
</ul>
<p>介绍: PostgreSQL学习手册,虽然是2012年的,但里面的内容与现在的最新版pg是兼容,可以正常使用的.</p>
<ul>
<li><a href="http://lwn.net/Articles/653411/" target="_blank" rel="noopener">《”Big data” features coming in PostgreSQL 9.5》</a></li>
</ul>
<p>介绍: PostgreSQL9.5中对于大数据的有利特性介绍.</p>
<ul>
<li><a href="http://postgres-bits.herokuapp.com/" target="_blank" rel="noopener">《PostgreSQL-The Bits You Haven’t Found》</a></li>
</ul>
<p>介绍: PostgreSQL中可能你还不知道的秘密,可以用作知识梳理.</p>
<ul>
<li><a href="http://rob.conery.io/2015/08/20/designing-a-postgresql-document-api/" target="_blank" rel="noopener">《Designing A PostgreSQL Document API》</a></li>
</ul>
<p>介绍: 自己动手设计一个PostgreSQL文档api.</p>
<ul>
<li><a href="https://eye.raze.mx/10-beginner-postgresql-tasks-you-should-know/" target="_blank" rel="noopener">《10 beginner’s PostgreSQL tasks you should know》</a></li>
</ul>
<p>介绍: PostgreSQL初学者快速入门要点.</p>
<ul>
<li><a href="https://www.airpair.com/postgresql/posts/sql-vs-nosql-ko-postgres-vs-mongo" target="_blank" rel="noopener">《SQL vs NoSQL KO. Postgres vs Mongo》</a></li>
</ul>
<p>介绍: 关系型数据库Postgres vs NoSQL 数据库Mongo的对决,这篇文章比较客观.</p>
<ul>
<li><a href="http://blog.chinaunix.net/uid-20726500-id-4454943.html" target="_blank" rel="noopener">《EnterpriseDB认证通关攻略》</a></li>
</ul>
<p>介绍:如果你想考EnterpriseDB认证,推荐阅读此篇文章.</p>
<ul>
<li><a href="https://github.com/uptimejp/sql_firewall" target="_blank" rel="noopener">《sql_firewall: a SQL Firewall Extension for PostgreSQL》</a></li>
</ul>
<p>介绍:这个插件可以更好的帮助你防御黑客攻击你的数据库.</p>
<ul>
<li><a href="http://blog.aquameta.com/2015/08/29/intro-meta/" target="_blank" rel="noopener">《Aquameta Layer 0: meta - Writable System Catalog for PostgreSQL》</a></li>
</ul>
<p>介绍:Aquameta的pg实践.</p>
<ul>
<li><a href="http://postgresweekly.com/" target="_blank" rel="noopener">《Postgres Weekly》</a></li>
</ul>
<p>介绍:国外的PostgreSQL周刊,每周的pg新鲜事.</p>
<ul>
<li><a href="https://www.citusdata.com/blog/19-ozgun/265-postgresql-pgshard-and-what-we-learned-our-failures" target="_blank" rel="noopener">《PostgreSQL, pg_shard, and what we learned from our failures》</a></li>
</ul>
<p>介绍:pg_shard的经验分享.</p>
<ul>
<li><a href="https://github.com/begriffs/postgrest" target="_blank" rel="noopener">《REST API for any Postgres database》</a></li>
</ul>
<p>介绍:pg的一个非官方REST API,此外推荐<a href="https://github.com/QBisConsult/psql-api" target="_blank" rel="noopener">RADIP RESTful API for PostgreSQL</a>.</p>
<ul>
<li><a href="http://mysql.taobao.org/monthly/2015/09/02/" target="_blank" rel="noopener">《Pg_clog异步提交一致性、原子操作与fsync》</a></li>
</ul>
<p>介绍:Pg_clog分析.</p>
<ul>
<li><a href="http://mysql.taobao.org/monthly/2015/09/06/" target="_blank" rel="noopener">《Pg的checkpoint的调度》</a></li>
</ul>
<p>介绍:同步机制分析.</p>
<ul>
<li><a href="https://www.kentik.com/postgresql-foreign-data-wrappers/" target="_blank" rel="noopener">《PostgreSQL Foreign Data Wrappers》</a></li>
</ul>
<p>介绍:PostgreSQL外部数据封装器介绍.</p>
<ul>
<li><a href="http://patshaughnessy.net/2014/10/13/following-a-select-statement-through-postgres-internals" target="_blank" rel="noopener">《Following a Select Statement Through Postgres Internals》</a></li>
</ul>
<p>介绍:SELECT查询如何在PostgreSQL内部工作的.</p>
<ul>
<li><a href="https://www.pipelinedb.com/" target="_blank" rel="noopener">《PipelineDB—The Streaming SQL Database》</a></li>
</ul>
<p>介绍:PipelineDB是基于PostgreSQL研发的一种流式关系数据库.</p>
<ul>
<li><a href="https://abdulyadi.files.wordpress.com/2015/10/ictvetpaper.pdf" target="_blank" rel="noopener">《PostgreSQL：A Platform for Multiple Sources Data Retrieval》</a></li>
</ul>
<p>介绍:使用pg完成多平台数据源检索,<a href="https://abdulyadi.files.wordpress.com/2015/10/presentation.pdf" target="_blank" rel="noopener">幻灯片</a>.</p>
<ul>
<li><a href="http://db.csail.mit.edu/projects/cstore/abadi-sigmod08.pdf" target="_blank" rel="noopener">《Column-Stores vs. Row-Stores: How Different Are They Really?》</a></li>
</ul>
<p>介绍:列式存储与行式存储数据库之间究竟有何区别？.</p>
<ul>
<li><a href="https://github.com/greenplum-db/gpdb" target="_blank" rel="noopener">《Pivotal Greenplum Database has been open sourced》</a></li>
</ul>
<p>介绍:基于PostgreSQL的Greenplum Database数据仓库开源.</p>
<ul>
<li><a href="http://pgsqlcn.com/index.html" target="_blank" rel="noopener">《PostgreSQL 数据库文档》</a></li>
</ul>
<p>介绍:PostgreSQL数据库文档,文档内容基于9.5版本演示.</p>
<ul>
<li><a href="http://highscalability.com/blog/2015/10/13/more-concurrency-improved-locking-in-postgresql.html" target="_blank" rel="noopener">《More Concurrency: Improved Locking In PostgreSQL》</a></li>
</ul>
<p>介绍:pg高并发在锁方面的改善，<a href="http://www.csdn.net/article/2015-11-07/2826143" target="_blank" rel="noopener">中文版</a>.</p>
<ul>
<li><a href="http://www.sqltabs.com/" target="_blank" rel="noopener">《SQL Tabs 》</a></li>
</ul>
<p>介绍:PostgreSQL的跨平台终端.</p>
<ul>
<li><a href="http://big-elephants.com/2015-10/writing-postgres-extensions-part-iii/" target="_blank" rel="noopener">《Writing Postgres Extensions - Debugging》</a></li>
</ul>
<p>介绍:PostgreSQL插件开发.</p>
<ul>
<li><a href="http://shisaa.jp/postset/postgresql-full-text-search-part-1.html" target="_blank" rel="noopener">《PostgreSQL: A full text search engine》</a></li>
</ul>
<p>介绍:PostgreSQL全文搜索引擎剖析<a href="http://shisaa.jp/postset/postgresql-full-text-search-part-2.html" target="_blank" rel="noopener">part2</a>,<a href="http://shisaa.jp/postset/postgresql-full-text-search-part-3.html" target="_blank" rel="noopener">part3</a>.</p>
<ul>
<li><a href="http://blog.postgresql-consulting.com/" target="_blank" rel="noopener">《PostgreSQL-Consulting.com》</a></li>
</ul>
<p>介绍:这是一个PG商业顾问的博客，里面提供的pg性能调优，部署，迁移等博文.</p>
<ul>
<li><a href="http://planet.postgresql.org/" target="_blank" rel="noopener">《PostgreSQL Planet》</a></li>
</ul>
<p>介绍:PostgreSQL官方的一个pg文章news.</p>
<ul>
<li><a href="http://blog.2ndquadrant.com/benchmarking-postgres-xl/" target="_blank" rel="noopener">《Benchmarking Postgres-XL》</a></li>
</ul>
<p>介绍:Postgres-XL压力测试分析,博客中的<a href="http://blog.2ndquadrant.com/" target="_blank" rel="noopener">其他内容</a>也很有料.</p>
<ul>
<li><a href="https://www.youtube.com/playlist?list=PLFRIKEguV54bgwAcgFiOs5GMo3q2DhVDj" target="_blank" rel="noopener">《PostgreSql Database Video Tutorials》</a></li>
</ul>
<p>介绍:PostgreSQL视频教程.</p>
<ul>
<li><a href="https://www.youtube.com/watch?v=GobQw9LMEaw" target="_blank" rel="noopener">《PostgreSQL Replication Tutorial》</a></li>
</ul>
<p>介绍：PostgreSQL Replication Tutorial</p>
<ul>
<li><a href="https://github.com/FRiCKLE/ngx_postgres" target="_blank" rel="noopener">《ngx_postgres》</a></li>
</ul>
<p>介绍:nginx访问Postgresql模块</p>
<ul>
<li><a href="http://anoncvs.postgresql.org/cvsweb.cgi/~checkout~/pgsql/src/tools/backend/index.html" target="_blank" rel="noopener">《How PostgreSQL Processes a Query》</a></li>
</ul>
<p>介绍:pg是如何处理一个查询的？</p>
<ul>
<li><a href="https://www.compose.io/articles/common-misconceptions-about-locking-in-postgresql/" target="_blank" rel="noopener">《Common misconceptions about locking in PostgreSQL》</a></li>
</ul>
<p>介绍:pg中容易误解的锁</p>
<ul>
<li><a href="http://www.bigsql.org/se/components.jsp" target="_blank" rel="noopener">《PostgreSQL Big SQL commponent》</a></li>
</ul>
<p>介绍:pg大数据工具箱</p>
<ul>
<li><a href="http://www.postgres.cn/docs/9.3.4/" target="_blank" rel="noopener">《PostgreSQL 9.3.4 文档》</a></li>
</ul>
<p>介绍:PostgreSQL 9.3.4 文档翻译,作者是《postgresql内核分析》作者</p>
<ul>
<li><a href="http://2ndquadrant.com/en/resources/pglogical/" target="_blank" rel="noopener">《pglogical：A logical replication system for PostgreSQL》</a></li>
</ul>
<p>介绍:pg的逻辑复制扩展,兼顾了基于触发器复制技术的灵活性,同时又有基于日志复制技术的高效性</p>
<ul>
<li><a href="http://tatiyants.com/pev" target="_blank" rel="noopener">《Postgres EXPLAIN Visualizer》</a></li>
</ul>
<p>介绍:Postgres的EXPLAIN查看执行计划已经非常的直观、全面，不过有人更钟情于图形化的展示，现在有了这样一个项目就是干这个的：Postgres EXPLAIN Visualizer (Pev)。</p>
<ul>
<li><a href="https://hashrocket.com/blog/posts/custom-aggregates-in-postgresql" target="_blank" rel="noopener">《Custom Aggregates in PostgreSQL》</a></li>
</ul>
<p>介绍:在写复杂的SQL时，可能会进行复杂的运算.但是原有的聚集函数并不能满足要求。这篇文章详细介绍了自定义聚集函数</p>
<ul>
<li><a href="http://www.geekytidbits.com/performance-tuning-postgres" target="_blank" rel="noopener">《Performance Tuning Queries in PostgreSQL》</a></li>
</ul>
<p>介绍:pg性能调优之数据查询,此外推荐<a href="https://www.youtube.com/watch?v=svqQzYFBPIo" target="_blank" rel="noopener">https://www.youtube.com/watch?v=svqQzYFBPIo</a></p>
<ul>
<li><a href="http://www.adalyz.com/building-full-text-search-for-your-application-using-postgres/" target="_blank" rel="noopener">《Building Full Text Search For Your Application using Postgres》</a></li>
</ul>
<p>介绍:使用pg为自己的应用构建全文检索</p>
<ul>
<li><a href="http://www.sqlinjectionwiki.com/Categories/4/postgresql-sql-injection-cheat-sheet/" target="_blank" rel="noopener">《PostgreSQL SQL Injection Cheat Sheet》</a></li>
</ul>
<p>介绍:PostgreSQL SQL注入手册</p>
<ul>
<li><a href="http://jinchengli.me/post/postgres-query-opt/" target="_blank" rel="noopener">《PostgreSQL Query Optimization》</a></li>
</ul>
<p>介绍:PostgreSQL查询优化，比较新手，但是你得有点基本的优化基础。否则会看起来很吃力</p>
<ul>
<li><a href="https://begriffs.com/posts/2016-03-20-postgrest-tour.html" target="_blank" rel="noopener">《A Tour of PostgREST》</a></li>
</ul>
<p>介绍:PostgreSQL RESTful教程</p>
<ul>
<li><a href="http://explain.depesz.com/" target="_blank" rel="noopener">《PostgreSQL’s explain analyze made readable》</a></li>
</ul>
<p>介绍:可视化PostgreSQL执行计划,pg学习看执行计划的好资料</p>
<ul>
<li><a href="https://wiki.postgresql.org/images/1/1e/QuanHa_PGConf_US_2016_-_Doc.pdf" target="_blank" rel="noopener">《PostgreSQL HA Database Clusters through Containment》</a></li>
</ul>
<p>介绍:pg HA数据库集群分析</p>
<ul>
<li><a href="http://community.hpe.com/hpeb/attachments/hpeb/JapanEnterpriseTopics/198/1/PostgreSQL%209.6%20New%20Features%20en%2020160606-1.pdf" target="_blank" rel="noopener">《PostgreSQL 9.6 New Features With Examples》</a></li>
</ul>
<p>介绍:PostgreSQL9.6新特性</p>
<ul>
<li><a href="http://www.dalibo.org/_media/understanding_explain.pdf" target="_blank" rel="noopener">《Understanding EXPLAIN》</a></li>
</ul>
<p>介绍:深入学习PostgreSQL的explain工具</p>
<ul>
<li><a href="https://pgexercises.com/" target="_blank" rel="noopener">《PostgreSQL Exercises》</a></li>
</ul>
<p>介绍:PostgreSQL学习实验室，有练习。适合新手入门pg</p>
<ul>
<li><a href="http://use-the-index-luke.com/blog/2016-07-29/on-ubers-choice-of-databases" target="_blank" rel="noopener">《On Uber’s Choice of Databases》</a></li>
</ul>
<p>介绍:文章诞生于Uber发表的一篇关于从pg迁移到mysql的文章，国内与国外讨论甚广.在讨论过程中诞生了很多精彩的干货，值得一读。学习数据库要深入，并存的世界才是和平.推荐<a href="https://yq.aliyun.com/articles/58421" target="_blank" rel="noopener">为PostgreSQL讨说法 - 浅析《UBER ENGINEERING SWITCHED FROM POSTGRES TO MYSQL》</a></p>
<ul>
<li><a href="https://robots.thoughtbot.com/advanced-postgres-performance-tips" target="_blank" rel="noopener">《Advanced Postgres Performance Tips》</a></li>
</ul>
<p>介绍:高级PostgreSQL性能调优</p>
<ul>
<li><a href="https://www.pgcon.org/2016/schedule/events/934.en.html" target="_blank" rel="noopener">《PostgreSQL Index Internals》</a></li>
</ul>
<p>介绍:索引的内部原理,推荐<a href="https://www.pgcon.org/2016/schedule/" target="_blank" rel="noopener">2016年欧洲pg大会资料</a>涵盖ppt与视频</p>
<ul>
<li><a href="http://www.pglivebackup.org/" target="_blank" rel="noopener">《PGLiveBackup》</a></li>
</ul>
<p>介绍:pg数据库自动全量备份脚本.</p>
<ul>
<li><a href="https://github.com/citusdata/pg_paxos" target="_blank" rel="noopener">《pg_paxos:Basic implementation of Paxos and Paxos》</a></li>
</ul>
<p>介绍:分布式算法Paxos的pg实践，可以先通过<a href="https://wiki.postgresql.org/images/8/8f/Marco_Slot_-_pg_paxos_2015-10-29.pdf" target="_blank" rel="noopener">PPT</a>.它实现了基本的Multi-Paxos和Paxos.</p>
<ul>
<li><a href="https://momjian.us/main/writings/pgsql/hw_selection.pdf" target="_blank" rel="noopener">《Database Hardware Selection Guidelines》</a></li>
</ul>
<p>介绍:数据库硬件选择指南,主要是一个参考.推荐<a href="https://www.youtube.com/watch?v=qIlYZeSuv8w" target="_blank" rel="noopener">Database Hardware Selection Guidelines </a></p>
<ul>
<li><a href="https://github.com/2ndQuadrant/pglogical" target="_blank" rel="noopener">《pglogical:Logical Replication extension for PostgreSQL》</a></li>
</ul>
<p>介绍:PostgreSQL逻辑复制扩展.</p>
<ul>
<li><a href="http://www.foo.be/docs-free/aw_pgsql_book.pdf" target="_blank" rel="noopener">《PostgreSQL: Introduction and Concepts》</a></li>
</ul>
<p>介绍:PostgreSQL的历史书.</p>
<ul>
<li><a href="https://blog.twitch.tv/how-twitch-uses-postgresql-c34aa9e56f58" target="_blank" rel="noopener">《How Twitch uses PostgreSQL》</a></li>
</ul>
<p>介绍:PostgreSQL在twitch的应用.</p>
<ul>
<li><a href="http://pg-monz.github.io/pg_monz/index-en.html" target="_blank" rel="noopener">《pg_monz:PostgreSQL monitoring template for Zabbix》</a></li>
</ul>
<p>介绍:PostgreSQL的Zabbix监控模版.</p>
<ul>
<li><a href="https://github.com/chenaisheng/pgclusteradmin" target="_blank" rel="noopener">《pgclusteradmin:PostgreSQL cluster manager base on Golang》</a></li>
</ul>
<p>介绍:一款基于go开发的Postgresql集群管理工具</p>
<ul>
<li><a href="https://github.com/ankane/pghero" target="_blank" rel="noopener">《PgHero:PostgreSQL performance monitoring tool》</a></li>
</ul>
<p>介绍:基于Ruby开发的PostgreSQL性能监控Web平台，支持SQL查询历史记录，实时连接数监控,SQL分析,性能调优推荐,Tune是基于<a href="http://pgtune.leopard.in.ua/" target="_blank" rel="noopener">pgtune</a></p>
<ul>
<li><a href="http://www.sai.msu.su/~megera/postgres/gist/" target="_blank" rel="noopener">《GiST for PostgreSQL》</a></li>
</ul>
<p>介绍:PostgreSQL的GiST（通用搜索树）核心开发作者主页.</p>
<ul>
<li><a href="https://github.com/workflowproducts/postage" target="_blank" rel="noopener">《Postage - A fast replacement for PGAdmin》</a></li>
</ul>
<p>介绍:PGAdmin的替代工具.里面有一个比较实用的功能就是可以逆向表成关系图</p>
<ul>
<li><a href="http://tatiyants.com/pev/" target="_blank" rel="noopener">《Postgres EXPLAIN Visualizer (pev)》</a></li>
</ul>
<p>介绍:Postgres 执行计划可视化工具</p>
<ul>
<li><a href="http://blog.postgresql-consulting.com/2017/09/postgresql-workings-in-one-picture.html" target="_blank" rel="noopener">《PostgreSQL workings in one picture》</a></li>
</ul>
<p>介绍:一张图了解PostgreSQL工作结构</p>
<ul>
<li><a href="https://rcoh.me/posts/postgres-indexes-under-the-hood/" target="_blank" rel="noopener">《Postgres Indexes Under the Hood》</a></li>
</ul>
<p>介绍:Postgres索引的底层运行机制</p>
<ul>
<li><a href="https://github.com/jberkus/annotated.conf" target="_blank" rel="noopener">《Annotated Config Files for PostgreSQL》</a></li>
</ul>
<p>介绍:PostgreSQL配置文件注释篇，详细介绍每个参数的意思，其中<code>postgresql.10.simple.conf</code>为必须修改项，<code>extra.10.conf</code>为可能要修改的项。</p>
<ul>
<li><a href="https://pgbackrest.org/" target="_blank" rel="noopener">《pgBackRest:Reliable PostgreSQL Backup &amp; Restore》</a></li>
</ul>
<p>介绍:pgBackRest支持并行备份和恢复，增量备份。对于大规模pg数据库备份与同步很有帮助</p>
<ul>
<li><a href="https://wiki.postgresql.org/wiki/PostgreSQL_Related_Slides_and_Presentations" target="_blank" rel="noopener">《PostgreSQL Related Slides and Presentations》</a></li>
</ul>
<p>介绍:PostgreSQL相关演讲资料。包括一些pgconf会议PPT。</p>
<ul>
<li><a href="https://github.com/dhamaniasad/awesome-postgres" target="_blank" rel="noopener">《Awesome Postgres》</a></li>
</ul>
<p>介绍:Awesome系列，高可用、备份、管理、打包版本、命令行、监控、扩展、优化、工具、API、以及一些比较不错的博文、例如<a href="https://www.justwatch.com/blog/post/debugging-postgresql-performance-the-hard-way/" target="_blank" rel="noopener">Debugging PostgreSQL performance, the hard way
</a></p>
<ul>
<li><a href="http://www.interdb.jp/pg/" target="_blank" rel="noopener">《The Internals of PostgreSQL》</a></li>
</ul>
<p>介绍:一本关于PG数据库管理员运维的书，主要围绕着集群、备份、Buffer、索引、复制.</p>
<ul>
<li><a href="http://postgres-data-types.pvh.ca/" target="_blank" rel="noopener">《Understanding the power of data types: PostgreSQL’s Secret Weapon》</a></li>
</ul>
<p>介绍:了解数据类型的力量：PostgreSQL的秘密武器.</p>
<ul>
<li><a href="https://www.postgresql.org/developer/backend/" target="_blank" rel="noopener">《PostgreSQL Backend Flowchart》</a></li>
</ul>
<p>介绍:PostgreSQL的后台执行流程图,对于阅读源码或者是想了解内部的构成可以先阅读。</p>

      
    </div>

    


    
    
    
    
      <div>
        

      </div>
    

    

    
      
    
    

    

    <footer class="post-footer">
      
        <div class="post-tags">
          
            <a href="/tags/postgresql/" rel="tag"><i class="fa fa-tag"></i> postgresql</a>
          
        </div>
      

      
      
      

      
        <div class="post-nav">
          <div class="post-nav-next post-nav-item">
            
              <a href="/apache/apache_note.html" rel="next" title="Apache cookbook">
                <i class="fa fa-chevron-left"></i> Apache cookbook
              </a>
            
          </div>

          <span class="post-nav-divider"></span>

          <div class="post-nav-prev post-nav-item">
            
              <a href="/database/postgresql_optimization.html" rel="prev" title="postgresql optimization">
                postgresql optimization <i class="fa fa-chevron-right"></i>
              </a>
            
          </div>
        </div>
      

      
      
    </footer>
  </div>
  
  
  
  </article>


  </div>


          </div>
          

  
    <div id="gitalk-container">
    </div>
    
  



        </div>
        
          
  
  <div class="sidebar-toggle">
    <div class="sidebar-toggle-line-wrap">
      <span class="sidebar-toggle-line sidebar-toggle-line-first"></span>
      <span class="sidebar-toggle-line sidebar-toggle-line-middle"></span>
      <span class="sidebar-toggle-line sidebar-toggle-line-last"></span>
    </div>
  </div>

  <aside id="sidebar" class="sidebar">
    
    <div class="sidebar-inner">

      

      
        <ul class="sidebar-nav motion-element">
          <li class="sidebar-nav-toc sidebar-nav-active" data-target="post-toc-wrap">
            Table of Contents
          </li>
          <li class="sidebar-nav-overview" data-target="site-overview-wrap">
            Overview
          </li>
        </ul>
      

      <div class="site-overview-wrap sidebar-panel">
        <div class="site-overview">
          <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
            
              <p class="site-author-name" itemprop="name">moonclearner</p>
              <p class="site-description motion-element" itemprop="description">moonclearner record code skill and my feeling</p>
          </div>

          
            <nav class="site-state motion-element">
              
                <div class="site-state-item site-state-posts">
                
                  <a href="/archives/">
                
                    <span class="site-state-item-count">109</span>
                    <span class="site-state-item-name">posts</span>
                  </a>
                </div>
              

              
                
                
                <div class="site-state-item site-state-categories">
                  <a href="/categories/index.html">
                    
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                    <span class="site-state-item-count">29</span>
                    <span class="site-state-item-name">categories</span>
                  </a>
                </div>
              

              
                
                
                <div class="site-state-item site-state-tags">
                  <a href="/tags/index.html">
                    
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                    <span class="site-state-item-count">55</span>
                    <span class="site-state-item-name">tags</span>
                  </a>
                </div>
              
            </nav>
          

          
            <div class="feed-link motion-element">
              <a href="/atom.xml" rel="alternate">
                <i class="fa fa-rss"></i>
                RSS
              </a>
            </div>
          

          
            <div class="links-of-author motion-element">
              
                <span class="links-of-author-item">
                  
                  
                    
                  
                  
                    
                  
                  <a href="https://github.com/moonclearner" title="GitHub &rarr; https://github.com/moonclearner" rel="noopener" target="_blank"><i class="fa fa-fw fa-github"></i>GitHub</a>
                </span>
              
                <span class="links-of-author-item">
                  
                  
                    
                  
                  
                    
                  
                  <a href="mailto:moonclearner@qq.com" title="E-Mail &rarr; mailto:moonclearner@qq.com" rel="noopener" target="_blank"><i class="fa fa-fw fa-envelope"></i>E-Mail</a>
                </span>
              
            </div>
          

          

          
          

          
            
          
          

        </div>
      </div>

      
      <!--noindex-->
        <div class="post-toc-wrap motion-element sidebar-panel sidebar-panel-active">
          <div class="post-toc">

            
            
            
            

            
              <div class="post-toc-content"><ol class="nav"><li class="nav-item nav-level-1"><a class="nav-link" href="#postgresql-Learning-resource-map"><span class="nav-number">1.</span> <span class="nav-text">postgresql Learning resource map</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#PostgreSQL-数据库-资料"><span class="nav-number">1.1.</span> <span class="nav-text">PostgreSQL(数据库)资料</span></a></li></ol></li></ol></div>
            

          </div>
        </div>
      <!--/noindex-->
      

      

    </div>
  </aside>


        
      </div>
    </main>

    <footer id="footer" class="footer">
      <div class="footer-inner">
        <script async src="https://busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>
<div class="copyright">&copy; <span itemprop="copyrightYear">2021</span>
  <span class="with-love" id="animate">
    <i class="fa fa-user"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">moonclearner</span>

  
    <span class="post-meta-divider">|</span>
    <span class="post-meta-item-icon">
      <i class="fa fa-area-chart"></i>
    </span>
    
    <span title="Symbols count total">162k</span>
  

  
    <span class="post-meta-divider">|</span>
    <span class="post-meta-item-icon">
      <i class="fa fa-coffee"></i>
    </span>
    
    <span title="Reading time total">2:28</span>
  
</div>









<div class="theme-info">
  <div class="powered-by"></div>
  <span class="post-count">博客全站共字</span>
</div>

<div class="powered-by">
<i class="fa fa-user-md"></i><span id="busuanzi_container_site_uv">
  本站访客数:<span id="busuanzi_value_site_uv"></span>
</span>
</div>

        








        
      </div>
    </footer>

    
      <div class="back-to-top">
        <i class="fa fa-arrow-up"></i>
        
      </div>
    

    

    

    
  </div>

  

<script>
  if (Object.prototype.toString.call(window.Promise) !== '[object Function]') {
    window.Promise = null;
  }
</script>


























  
  <script src="/lib/jquery/index.js?v=2.1.3"></script>

  
  <script src="/lib/velocity/velocity.min.js?v=1.2.1"></script>

  
  <script src="/lib/velocity/velocity.ui.min.js?v=1.2.1"></script>


  


  <script src="/js/src/utils.js?v=6.7.0"></script>

  <script src="/js/src/motion.js?v=6.7.0"></script>



  
  

  
  <script src="/js/src/scrollspy.js?v=6.7.0"></script>
<script src="/js/src/post-details.js?v=6.7.0"></script>



  


  <script src="/js/src/bootstrap.js?v=6.7.0"></script>



  



  











  
  
  <script src="//cdn.jsdelivr.net/npm/gitalk@1.4.0/dist/gitalk.min.js"></script>

  
  
  <link rel="stylesheet" href="//cdn.jsdelivr.net/npm/gitalk@1.4.0/dist/gitalk.css">

  
  
  <script src="//cdn.jsdelivr.net/npm/js-md5@0.7.3/src/md5.min.js"></script>

   <script>
        var gitalk = new Gitalk({
          clientID: 'e47bf4fb4f5f701fc3a6',
          clientSecret: '9155535868459f5a16e1180edee3a495ecc8eb71',
          repo: 'moonclearner.github.io',
          owner: 'moonclearner',
          admin: ['moonclearner'],
          id: md5(location.pathname),
          distractionFreeMode: 'true'
        })
        gitalk.render('gitalk-container')
       </script>


  

  <script>
    // Popup Window;
    var isfetched = false;
    var isXml = true;
    // Search DB path;
    var search_path = "search.xml";
    if (search_path.length === 0) {
      search_path = "search.xml";
    } else if (/json$/i.test(search_path)) {
      isXml = false;
    }
    var path = "/" + search_path;
    // monitor main search box;

    var onPopupClose = function (e) {
      $('.popup').hide();
      $('#local-search-input').val('');
      $('.search-result-list').remove();
      $('#no-result').remove();
      $(".local-search-pop-overlay").remove();
      $('body').css('overflow', '');
    }

    function proceedsearch() {
      $("body")
        .append('<div class="search-popup-overlay local-search-pop-overlay"></div>')
        .css('overflow', 'hidden');
      $('.search-popup-overlay').click(onPopupClose);
      $('.popup').toggle();
      var $localSearchInput = $('#local-search-input');
      $localSearchInput.attr("autocapitalize", "none");
      $localSearchInput.attr("autocorrect", "off");
      $localSearchInput.focus();
    }

    // search function;
    var searchFunc = function(path, search_id, content_id) {
      'use strict';

      // start loading animation
      $("body")
        .append('<div class="search-popup-overlay local-search-pop-overlay">' +
          '<div id="search-loading-icon">' +
          '<i class="fa fa-spinner fa-pulse fa-5x fa-fw"></i>' +
          '</div>' +
          '</div>')
        .css('overflow', 'hidden');
      $("#search-loading-icon").css('margin', '20% auto 0 auto').css('text-align', 'center');

      

      $.ajax({
        url: path,
        dataType: isXml ? "xml" : "json",
        async: true,
        success: function(res) {
          // get the contents from search data
          isfetched = true;
          $('.popup').detach().appendTo('.header-inner');
          var datas = isXml ? $("entry", res).map(function() {
            return {
              title: $("title", this).text(),
              content: $("content",this).text(),
              url: $("url" , this).text()
            };
          }).get() : res;
          var input = document.getElementById(search_id);
          var resultContent = document.getElementById(content_id);
          var inputEventFunction = function() {
            var searchText = input.value.trim().toLowerCase();
            var keywords = searchText.split(/[\s\-]+/);
            if (keywords.length > 1) {
              keywords.push(searchText);
            }
            var resultItems = [];
            if (searchText.length > 0) {
              // perform local searching
              datas.forEach(function(data) {
                var isMatch = false;
                var hitCount = 0;
                var searchTextCount = 0;
                var title = data.title.trim();
                var titleInLowerCase = title.toLowerCase();
                var content = data.content.trim().replace(/<[^>]+>/g,"");
                
                var contentInLowerCase = content.toLowerCase();
                var articleUrl = decodeURIComponent(data.url).replace(/\/{2,}/g, '/');
                var indexOfTitle = [];
                var indexOfContent = [];
                // only match articles with not empty titles
                if(title != '') {
                  keywords.forEach(function(keyword) {
                    function getIndexByWord(word, text, caseSensitive) {
                      var wordLen = word.length;
                      if (wordLen === 0) {
                        return [];
                      }
                      var startPosition = 0, position = [], index = [];
                      if (!caseSensitive) {
                        text = text.toLowerCase();
                        word = word.toLowerCase();
                      }
                      while ((position = text.indexOf(word, startPosition)) > -1) {
                        index.push({position: position, word: word});
                        startPosition = position + wordLen;
                      }
                      return index;
                    }

                    indexOfTitle = indexOfTitle.concat(getIndexByWord(keyword, titleInLowerCase, false));
                    indexOfContent = indexOfContent.concat(getIndexByWord(keyword, contentInLowerCase, false));
                  });
                  if (indexOfTitle.length > 0 || indexOfContent.length > 0) {
                    isMatch = true;
                    hitCount = indexOfTitle.length + indexOfContent.length;
                  }
                }

                // show search results

                if (isMatch) {
                  // sort index by position of keyword

                  [indexOfTitle, indexOfContent].forEach(function (index) {
                    index.sort(function (itemLeft, itemRight) {
                      if (itemRight.position !== itemLeft.position) {
                        return itemRight.position - itemLeft.position;
                      } else {
                        return itemLeft.word.length - itemRight.word.length;
                      }
                    });
                  });

                  // merge hits into slices

                  function mergeIntoSlice(text, start, end, index) {
                    var item = index[index.length - 1];
                    var position = item.position;
                    var word = item.word;
                    var hits = [];
                    var searchTextCountInSlice = 0;
                    while (position + word.length <= end && index.length != 0) {
                      if (word === searchText) {
                        searchTextCountInSlice++;
                      }
                      hits.push({position: position, length: word.length});
                      var wordEnd = position + word.length;

                      // move to next position of hit

                      index.pop();
                      while (index.length != 0) {
                        item = index[index.length - 1];
                        position = item.position;
                        word = item.word;
                        if (wordEnd > position) {
                          index.pop();
                        } else {
                          break;
                        }
                      }
                    }
                    searchTextCount += searchTextCountInSlice;
                    return {
                      hits: hits,
                      start: start,
                      end: end,
                      searchTextCount: searchTextCountInSlice
                    };
                  }

                  var slicesOfTitle = [];
                  if (indexOfTitle.length != 0) {
                    slicesOfTitle.push(mergeIntoSlice(title, 0, title.length, indexOfTitle));
                  }

                  var slicesOfContent = [];
                  while (indexOfContent.length != 0) {
                    var item = indexOfContent[indexOfContent.length - 1];
                    var position = item.position;
                    var word = item.word;
                    // cut out 100 characters
                    var start = position - 20;
                    var end = position + 80;
                    if(start < 0){
                      start = 0;
                    }
                    if (end < position + word.length) {
                      end = position + word.length;
                    }
                    if(end > content.length){
                      end = content.length;
                    }
                    slicesOfContent.push(mergeIntoSlice(content, start, end, indexOfContent));
                  }

                  // sort slices in content by search text's count and hits' count

                  slicesOfContent.sort(function (sliceLeft, sliceRight) {
                    if (sliceLeft.searchTextCount !== sliceRight.searchTextCount) {
                      return sliceRight.searchTextCount - sliceLeft.searchTextCount;
                    } else if (sliceLeft.hits.length !== sliceRight.hits.length) {
                      return sliceRight.hits.length - sliceLeft.hits.length;
                    } else {
                      return sliceLeft.start - sliceRight.start;
                    }
                  });

                  // select top N slices in content

                  var upperBound = parseInt('1');
                  if (upperBound >= 0) {
                    slicesOfContent = slicesOfContent.slice(0, upperBound);
                  }

                  // highlight title and content

                  function highlightKeyword(text, slice) {
                    var result = '';
                    var prevEnd = slice.start;
                    slice.hits.forEach(function (hit) {
                      result += text.substring(prevEnd, hit.position);
                      var end = hit.position + hit.length;
                      result += '<b class="search-keyword">' + text.substring(hit.position, end) + '</b>';
                      prevEnd = end;
                    });
                    result += text.substring(prevEnd, slice.end);
                    return result;
                  }

                  var resultItem = '';

                  if (slicesOfTitle.length != 0) {
                    resultItem += "<li><a href='" + articleUrl + "' class='search-result-title'>" + highlightKeyword(title, slicesOfTitle[0]) + "</a>";
                  } else {
                    resultItem += "<li><a href='" + articleUrl + "' class='search-result-title'>" + title + "</a>";
                  }

                  slicesOfContent.forEach(function (slice) {
                    resultItem += "<a href='" + articleUrl + "'>" +
                      "<p class=\"search-result\">" + highlightKeyword(content, slice) +
                      "...</p>" + "</a>";
                  });

                  resultItem += "</li>";
                  resultItems.push({
                    item: resultItem,
                    searchTextCount: searchTextCount,
                    hitCount: hitCount,
                    id: resultItems.length
                  });
                }
              })
            };
            if (keywords.length === 1 && keywords[0] === "") {
              resultContent.innerHTML = '<div id="no-result"><i class="fa fa-search fa-5x"></i></div>'
            } else if (resultItems.length === 0) {
              resultContent.innerHTML = '<div id="no-result"><i class="fa fa-frown-o fa-5x"></i></div>'
            } else {
              resultItems.sort(function (resultLeft, resultRight) {
                if (resultLeft.searchTextCount !== resultRight.searchTextCount) {
                  return resultRight.searchTextCount - resultLeft.searchTextCount;
                } else if (resultLeft.hitCount !== resultRight.hitCount) {
                  return resultRight.hitCount - resultLeft.hitCount;
                } else {
                  return resultRight.id - resultLeft.id;
                }
              });
              var searchResultList = '<ul class=\"search-result-list\">';
              resultItems.forEach(function (result) {
                searchResultList += result.item;
              })
              searchResultList += "</ul>";
              resultContent.innerHTML = searchResultList;
            }
          }

          if ('auto' === 'auto') {
            input.addEventListener('input', inputEventFunction);
          } else {
            $('.search-icon').click(inputEventFunction);
            input.addEventListener('keypress', function (event) {
              if (event.keyCode === 13) {
                inputEventFunction();
              }
            });
          }

          // remove loading animation
          $(".local-search-pop-overlay").remove();
          $('body').css('overflow', '');

          proceedsearch();
        }
      });
    }

    // handle and trigger popup window;
    $('.popup-trigger').click(function(e) {
      e.stopPropagation();
      if (isfetched === false) {
        searchFunc(path, 'local-search-input', 'local-search-result');
      } else {
        proceedsearch();
      };
    });

    $('.popup-btn-close').click(onPopupClose);
    $('.popup').click(function(e){
      e.stopPropagation();
    });
    $(document).on('keyup', function (event) {
      var shouldDismissSearchPopup = event.which === 27 &&
        $('.search-popup').is(':visible');
      if (shouldDismissSearchPopup) {
        onPopupClose();
      }
    });
  </script>





  

  

  
  <script>
    (function(){
      var bp = document.createElement('script');
      var curProtocol = window.location.protocol.split(':')[0];
      if (curProtocol === 'https') {
        bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';        
      }
      else {
        bp.src = 'http://push.zhanzhang.baidu.com/push.js';
      }
      var s = document.getElementsByTagName("script")[0];
      s.parentNode.insertBefore(bp, s);
    })();
  </script>


  

  

  

  

  

  

  

  

  

  

</body>
<script type="text/javascript" src="/js/src/dynamic_bg.js"></script>
<script src="https://cdn.jsdelivr.net/gh/moonclearner/live2d-widget/autoload.js"></script>
</html>
